package drp.snowbell.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import drp.snowbell.entity.RelationType;


@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ARelation {

	/**
	 * 别名,name是根据关联的实体自动生成的
	 * 
	 * @return
	 */
	String alias();

	/**
	 * 关联模块名称.
	 */
	String rBean();// rBeanName

	/**
	 * 主模块关联的字段名.如果不是使用关联表关联的话,可不填.
	 */
	String mField() default "";// mFieldName

	/**
	 * 关联模块的字段名.
	 */
	String rField() default "";// rFieldName

	/**
	 * 主要模块的属性.必填,因为要获取其值来生产SQl语句.
	 */
	String mProperty();// mProperty

	/**
	 * 关联模块的字段名.可以为空,但是如果为空的话relFieldName必填
	 */
	String rProperty();// rProperty

	/**
	 * 关系表名称.(rt为relation table 的简称)
	 */
	String rt() default "";// relTable

	/**
	 * 关系表里的主属性的字段名称
	 * 
	 * @return
	 */
	String rtMField() default "";// relTableMFieldName

	/**
	 * 关系表里的关联属性的字段名称
	 * 
	 * @return
	 */
	String rtRField() default "";// relTableRFieldName

	/**
	 * 是否自动从数据库加载数据.废弃了.因为不能过多侵入代码,可以提供工具函数给开发者获取数据
	 * 
	 * @return
	 */
	// boolean isAutoFetch() default false;

	/**
	 * 是否自动更新关联
	 * 
	 * @return
	 */
	// boolean isAutoUpdateRelation() default false;

	/**
	 * 关联类型.
	 */
	RelationType relationType();

	/**
	 * 是否是纯关联表,是的话在Install的时候创建该表
	 */
	boolean isPureRelTable() default false;

}
